package LeetCode;

public class TestNum82 {
    //存在一个按升序排列的链表，给你这个链表的头节点 head ，请你删除链表中所有存在数字重复情况的节点，只保留原始链表中没有重复出现的数字。
    //返回同样按升序排列的结果链表
    public ListNode deleteDuplicates(ListNode head) {
        //203号问题中调入的ListNode类
        //创建虚拟头节点,指向头节点
        ListNode dummyHead = new ListNode(101);
        dummyHead.next = head;
        //定义两个指针分别指向dummyHead,head；
        ListNode prev = dummyHead;
        ListNode cur = prev.next;
        //当cur不为空时进入while循环
        while (cur != null) {
            //创建第三个指针用于指向cur下一节点
            ListNode next = cur.next;
            //如果next为空则head只有一个节点
            if (next == null) {
                return dummyHead.next;
            } else {
                //此时链表至少有两个节点
                if (cur.val == next.val) {
                    //让next一直向后移动移动到不相等的节点，并且不为空
                    while (next != null && cur.val == next.val) {
                        //当cur的值与next的值相同时
                        next = next.next;
                    }
                    //此时next的值与cur的值不相等
                    //prev为重复元素的前驱
                    //next为重复元素的后继
                    //让prev指向next，及删除重复元素
                    //cur走到next节点，进入啊下一次循环
                    prev.next = next;
                    cur = next;
                }else {
                    //cur与next不重复
                    prev=prev.next;
                    cur=cur.next;
                }
            }
        }
        return dummyHead.next;
    }
}
